//登录窗口


#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <QJsonObject>
#include <QMap>
#include <functional>
#include "netglobal.h"

namespace Ui {
class LoginDialog;
}

// 登录界面
class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();

private:
    void _SetConnect();

    void _SetWidgetState();

    void _InitHandlers();

    // 设置登录时的图片
    void _SetImage();

    // 检查用户输入
    bool _CheckInput();

    void _ShowTips(QString msg, bool flag);

public slots:
    void slot_forget_pwd();

private slots:
    // 登录按钮槽函数
    void on_login_button_clicked();

    // 连接聊天服务器槽函数
    void _slot_tcp_connect(bool flag);

    // 登录错误槽函数
    void _slot_login_faile(int code);

    void _SlotLoginModFinish(ReqId id, ErrorCode err, QString res);
private:
    Ui::LoginDialog *ui;

    uint32_t _id;
    QString _token;
    QMap<ReqId, std::function<void(const QJsonObject&)>> _handlers;

signals:
    void switchRegister();  //自定义信号，点击注册按钮触发
    void switchReset();     //自定义信号，点击忘记密码触发
    void sigConnectTcp(ServerInfo);   //自定义信号, 用户登录时发送

};

#endif // LOGINDIALOG_H
